package com.guojian.sso.session;

import java.io.IOException;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.Session;
import org.apache.catalina.session.StandardManager;

/**
 * 继承Tomcat_的 @StandardManager (session管理器),重写session的 add,findSession方法,使session可以移植到其他位置
 * 
 * 缺点: 1.依赖于Tomcat_容器,部署的容器发生变化就需要重新实现 ,并且部署的时候可能是部署在war包形式部署,还要根据实际的Tomcat版本
 * 做出相应的调整,因为可能各个版本的Tomcat的StandardManager不一样
 * 
 * 解决方案: 重新实现HttpSession,不依赖具体容器的HttpSession实现
 * 
 * Session共享最好的方式就是自己独立实现一套session
 * 
 * @author GuoJian
 *
 */
public class SessionManager extends StandardManager {

	@Override
	public void add(Session session) {
		super.add(session);
		System.out.println("add session to mycache == " + session.toString());

		//将 session 加入自己定义的容器中
		//cache.add(session);
	}

	@Override
	public Session findSession(String id) throws IOException {
		System.out.println("=======findSession=========>" + id);
		return super.findSession(id);
		//return cache.get(id);
	}

	@Override
	public Session[] findSessions() {
		return super.findSessions();
		//cache.values();

	}

	@Override
	public void remove(Session session, boolean update) {
		// TODO Auto-generated method stub
		super.remove(session, update);
	}

	@Override
	protected void changeSessionId(Session session, String newId, boolean notifySessionListeners, boolean notifyContainerListeners) {
		// TODO Auto-generated method stub
		super.changeSessionId(session, newId, notifySessionListeners, notifyContainerListeners);
	}

	@Override
	public void updateSessionMaxAliveTime(int sessionAliveTime) {
		// TODO Auto-generated method stub
		super.updateSessionMaxAliveTime(sessionAliveTime);
	}

	@Override
	public void expireSession(String sessionId) {
		// TODO Auto-generated method stub
		super.expireSession(sessionId);
	}

	@Override
	protected synchronized void startInternal() throws LifecycleException {
		// TODO Auto-generated method stub
		super.startInternal();
	}

}
